package cn.xenosp.server.module.third_server.service;

import cn.xenosp.server.common.Result;
import cn.xenosp.server.common.system.TargetOperatingSystem;
import cn.xenosp.server.common.tools.IdUtil;
import cn.xenosp.server.common.tools.ServiceUtil;
import cn.xenosp.server.module.third_server.dao.NginxDao;
import cn.xenosp.server.module.third_server.entity.NginxEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import oshi.SystemInfo;
import oshi.software.os.OperatingSystem;

import java.io.File;
import java.util.Map;

/**
 * 项目名： nginx-web
 * 包路径： cn.xenosp.nginx.web.service
 * 作者：   TongHui
 * 创建时间: 2024-07-27 08:54
 * 描述: TODO
 * 版本: 1.0
 */
@Slf4j
@Service
public class NginxService {

//    private static Logs logs = Logs.getInstance("Nginx接口后台",NginxService.class);
    @Autowired
NginxDao nginxDao;

    SystemInfo systemInfo = new SystemInfo();
    @Autowired
    TargetOperatingSystem operatingSystem;

    public Map<String,Object> list(Integer page, Integer limit){
        log.info("查询服务列表");
        return nginxDao.list(page, limit);
    }

    public NginxEntity get(String id){
        return nginxDao.get(id);
    }

    public void edit(NginxEntity nginxEntity){
        nginxDao.edit(nginxEntity);
    }

    public Result add(NginxEntity nginxEntity){
        log.info("添加服务");
        if (!new File(nginxEntity.getStartPath()).exists()){
            return Result.error("Nginx 启动文件不存在",nginxEntity.getStartPath());
        }

        if (ServiceUtil.isLINUX() && !new File(nginxEntity.getConfigPath()).exists()){
            return Result.error("Nginx 配置文件不存在",nginxEntity.getConfigPath());
        }

        operatingSystem.createScript(nginxEntity.getServerName(),nginxEntity.getStartPath(),nginxEntity.getConfigPath());

        nginxEntity.setId(IdUtil.getId());

        OperatingSystem operatingSystem = systemInfo.getOperatingSystem();
        OperatingSystem.OSVersionInfo osVersionInfo = systemInfo.getOperatingSystem().getVersionInfo();
        nginxEntity.setSystem(operatingSystem.getFamily() + " " + osVersionInfo.getVersion());
        nginxDao.add(nginxEntity);
        return Result.OK("","");
    }

    public void del(String id){
        log.info("删除服务："+id);
        nginxDao.del(id);
    }

    public void exec(String exec, NginxEntity nginxEntity) throws Exception {
        switch (exec){
            case "1": operatingSystem.startServer(nginxEntity); break;
            case "2": operatingSystem.stopServer(nginxEntity); break;
            case "3": operatingSystem.restartServer(nginxEntity); break;
        }
    }

    public void savefile(String id,String value,String type){
        NginxEntity nginxEntity = get(id);
        operatingSystem.saveConfig(nginxEntity,value,type);
    }

}
